package cn.tedu.baidashi.controller.back;

import cn.tedu.baidashi.common.ItemsStatus;
import cn.tedu.baidashi.common.ResponseCode;
import cn.tedu.baidashi.model.Items;
import cn.tedu.baidashi.service.IItemsService;
import cn.tedu.baidashi.vo.ItemsVO;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;

@RestController
@RequestMapping("/backItems")
@Slf4j
public class BackItemsController {

    @Resource
    private IItemsService itemsService;

    /**
     * 分页查询商品详情
     * @param pageNum
     * @return
     */
    @GetMapping("/{pageNum}")
    public PageInfo<Items> getBackItems(@PathVariable(required = false)Integer pageNum){
        if (pageNum==null){
            pageNum=1;
        }
        int pageSize=3;
        return itemsService.getAll(pageNum,pageSize);
    }

    /**
     * 商品新增
     * @param itemsVO
     */
    @PostMapping("/add")
    public String addItem(@Validated ItemsVO itemsVO, BindingResult result){
       log.debug("接收的表单信息：{}",itemsVO);
        if (result.hasErrors()){
            String msg=result.getFieldError().getDefaultMessage();
            return msg;
        }
        itemsService.addItems(itemsVO);
        return ResponseCode.RESPONSE_CODE_SUCCESS.getMessage();
    }

    @Value("${baidashi.resource.path}")
    private File resourcePath;
    @Value("${baidashi.resource.host}")
    private String resourceHost;

    /**
     * 执行商品图片上传
     * @param imageFile
     * @return
     * @throws IOException
     */
    @PostMapping("/upload/file")
    public String upload(MultipartFile imageFile) throws IOException {
        //1、确定文件保存的路径，会将不同日期的文件保存到不同的文件夹中
        String path= DateTimeFormatter.ofPattern("yyyy/MM/dd").format(LocalDateTime.now());
        File folder=new File(resourcePath,path);
        //创建文件夹
        folder.mkdirs();

        //2、确定文件名
        //获得原始文件名，截取后缀名
        String filename=imageFile.getOriginalFilename();
        String ext=filename.substring(filename.lastIndexOf("."));
        //创建随机新文件名，尽量减少文件名重复几率
        String name= UUID.randomUUID().toString()+ext;

        //3、执行上传
        //实例化要保存的文件对象（路径名+文件名的对象）
        File file=new File(folder,name);
        log.debug("文件上传路径：{}"+file.getAbsolutePath());
        //执行文件上传
        imageFile.transferTo(file);

        //补充：实现回显
        String url=resourceHost+"/"+path+"/"+name;
        log.debug("回显图片路径:{}",url);
        //4、返回结果
        return url;
    }

    /**
     * 修改商品时获得商品详情
     * @param itemsId
     * @return
     */
    @GetMapping("/get/{itemsId}")
    public ItemsVO getItemsById(@PathVariable Integer itemsId){
        return itemsService.getItemsVOById(itemsId);
    }

    @GetMapping("/delete/{itemsId}")
    public String deleteItems(@PathVariable Integer itemsId){
        itemsService.deleteItemsById(ItemsStatus.ITEMS_STATUS_DELETE.getCode(),itemsId);
        return ResponseCode.RESPONSE_CODE_SUCCESS.getMessage();
    }

    @PostMapping("/update/{itemsId}")
    public String addItem(@Validated ItemsVO itemsVO, BindingResult result,@PathVariable Integer itemsId){
        log.debug("接收的表单信息：{}",itemsVO);
        if (result.hasErrors()){
            String msg=result.getFieldError().getDefaultMessage();
            return msg;
        }
        itemsService.updateItemsById(itemsVO,itemsId);
        return ResponseCode.RESPONSE_CODE_SUCCESS.getMessage();
    }
}
